package com.zmn.plat.persistence.interfaces.product.tariff;

import com.zmn.plat.model.dto.product.ProductTariffRelationDTO;
import com.zmn.plat.model.entity.category.ServCategAndCategTwoQuery;
import com.zmn.plat.model.entity.product.tariff.ProductTariff;
import com.zmn.plat.model.entity.product.tariff.ProductTariffQuery;
import com.zmn.plat.model.vo.product.tariff.ProductTariffExportVO;
import com.zmn.plat.model.vo.product.tariff.ProductTariffVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * 产品故障价格表，每个产品价格表一条数据，配置价格表说明、状态等
 *
 * @author tanbiao
 * @since 2019-11-21 18:57:24
 */
public interface ProductTariffDao {

    /**
     * 查询
     *
     * @param relateId ID
     * @return
     */
    ProductTariff findByKey(Integer relateId);

    /**
     * 根据价格表ID查询
     *
     * @param tariffId ID
     * @return
     */
    ProductTariff findByTariffId(Integer tariffId);



    /**
     * 根据id搜索
     *
     * @param relateIds 产品价格表id集合
     * @return
     */
    List<ProductTariffVO> findByKeys(@Param("relateIds") List<Integer> relateIds);

    /**
     * 分页搜索
     *
     * @param query 条件
     * @return 列表
     */
    List<ProductTariffVO> listPageByQuery(ProductTariffQuery query);

    /**
     * 搜索
     *
     * @param query 条件
     * @return
     */
    List<ProductTariffVO> listByQuery(ProductTariffQuery query);

    /**
     * 导出产品价格表数据
     * @param query
     * @return
     */
    List<ProductTariffExportVO> listExportExcelPageByQuery(ProductTariffQuery query);

    /**
     * 查询服务分类和后台一级分类下配置的产品价格表
     * @param tariffId
     * @param servCategId
     * @param categOneId
     * @return
     */
    List<ProductTariff> listByTariffIdAndServCategIdAndCategOneId(@Param("tariffId") Integer tariffId, @Param("servCategId") Integer servCategId, @Param("categOneId") Integer categOneId);

    /**
     * 查询产品默认价格表
     *
     * @param productIds
     * @param bizType
     * @param general
     * @return
     */
    List<ProductTariffRelationDTO> listByProductIdsAndBizTypeAndGeneral(@Param("productIds") List<Integer> productIds,@Param("channelId")Integer channelId,
                                                                        @Param("bizType") Integer bizType, @Param("general") Integer general,
                                                                        @Param("tariffType") Integer tariffType,@Param("servCategAndCategTwoQueryList") List<ServCategAndCategTwoQuery> servCategAndCategTwoQueryList);

    /**
     * 查询产品价格表对应的产品关系
     *
     * @param productIds
     * @param bizType
     * @param tariffId
     * @return
     */
    List<ProductTariffRelationDTO> listByProductIdsAndBizTypeAndTariffId(@Param("productIds") List<Integer> productIds,@Param("channelId")Integer channelId,
                                                                         @Param("bizType") Integer bizType, @Param("tariffId") Integer tariffId,
                                                                         @Param("servCategAndCategTwoQueryList")List<ServCategAndCategTwoQuery> servCategAndCategTwoQueryList);

    /**
     * 所有数据
     *
     * @return
     */
    List<ProductTariff> listAll();

    /**
     * 统计
     *
     * @param query 条件
     * @return
     */
    Integer countByQuery(ProductTariffQuery query);

    /**
     * 更新状态
     *
     * @param productFaultTariff
     * @return
     */
    Integer updateStatusByKey(ProductTariff productFaultTariff);

    /**
     * 更新状态：批量
     *
     * @param ids
     * @param status
     * @param mcStaffName
     * @return
     */
    Integer updateBatchStatusByKey(@Param("ids") List<Integer> ids, @Param("status") Integer status, @Param("staffName") String mcStaffName);

    /**
     * 更新
     *
     * @param productFaultTariff
     * @return
     */
    Integer updateByKey(ProductTariff productFaultTariff);

    /**
     * 根据产品id或者价格表id更新状态
     *
     * @param productId 产品id，可为空
     * @param tariffId 价格表id，可为空
     * @param status 状态不可为空
     * @return
     */
    Integer updateStatusByProductIdOrTariffId(@Param("productId")Integer productId, @Param("tariffId")Integer tariffId,
                                              @Param("status")Integer status, @Param("updater")String updater);

    /**
     * 根据价格表IDs停用非默认价格表
     * @param tariffIds
     * @param updater
     * @return
     */
    Integer disableStatusByTariffId(@Param("tariffIds")List<Integer> tariffIds, @Param("updater")String updater);

    /**
     * 根据价格表id更新状态
     *
     * @param tariffIds 价格表id，可为空
     * @param status 状态不可为空
     * @return
     */
    Integer updateStatusByTariffIds(@Param("tariffIds")List<Integer> tariffIds,  @Param("status")Integer status, @Param("updater")String updater);

    /**
     * 插入
     *
     * @param productFaultTariff
     * @return
     */
    Integer insert(ProductTariff productFaultTariff);

    /**
     * 批量插入
     *
     * @param productFaultTariffList
     * @return
     */
    Integer insertBatch(@Param("productFaultTariffList") List<ProductTariff> productFaultTariffList);
    /**
     * 删除
     *
     * @param relateId ID
     * @return
     */
    Integer deleteByKey(Integer relateId);

    /**
     * 删除服务分类和后台一级分类下配置的产品价格表
     * @param tariffId
     * @param servCategId
     * @param categOneId
     * @return
     */
    Integer deleteByTariffIdAndServCategIdAndCategOneId(@Param("tariffId") Integer tariffId, @Param("servCategId") Integer servCategId, @Param("categOneId") Integer categOneId);
}
